package com.chen.loc8;

import java.util.concurrent.TimeUnit;

/**
 * 1、两个线程都加锁，先打印 发短信 还是 打电话？
 *  发短信。因为synchronized锁住的是方法的调用者，两个方法锁住的同一个对象，谁先拿到谁执行。
 *  我们设置了线程A开启后，延迟1秒，线程B才开启
 * 2、在这基础上，sendMsg 延迟4秒，先打印 发短信 还是 打电话？
 *  还是发短信。因为线程A比线程B先开启，获得了phone对象，所以B线程只能等着
 */
public class Test1 {
    public static void main(String[] args) {

        Phone phone = new Phone();

        new Thread(phone::sendMsg, "A").start();

        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        new Thread(phone::call, "B").start();

    }
}

class Phone {
    public synchronized void sendMsg() {
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("发短信");
    }

    public synchronized void call() {
        System.out.println("打电话");
    }
}
